home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BBS in a Box 7
/
BBS in a Box - Macintosh - Volume VII (BBS in a Box) (January 1993).iso
/
Files
/
Tele
/
C
/
Comet2.1.3.cpt
/
3270XCMD
/
TNdrvr.c
< prev
next >
Wrap
Text File
|
1990-03-22
|
3KB
|
140 lines
/* TNdrvr.c -- Copyright 1989 Cornell University */
#include <Memory.h>
#include <Types.h>
#include <Devices.h>
#include <Desk.h>
#include "TNdrvr.h"
pascal void debugger() extern 0xA9FF;
pascal OSErr DRVROpen(ctlpb, dctl)
CntrlParam * ctlpb;
DCtlPtr dctl;
{
struct storage * store;
if (dctl->dCtlStorage != 0L)
/* just return, we've already been opened */
return(0);
SetZone(SystemZone());
dctl->dCtlStorage = NewHandle((long)(sizeof(struct storage)));
SetZone(ApplicZone());
store = (struct storage *) * dctl->dCtlStorage;
if (store == 0L)
return(-1);
store->tnopen = 0L;
return(0);
}
pascal OSErr DRVRControl(ctlpb, dctl)
CntrlParam * ctlpb;
DCtlPtr dctl;
{
long * args;
struct storage * store;
struct storage * tnargs;
char * tmpp;
OSErr retval;
OSErr (*cfunc)();
/* MPW C calls (*store->cfunc)() an "illegal function",
chokes on args if pascal (*pfunc)() */
retval = 0;
HLock(dctl->dCtlStorage);
store = (struct storage *) *dctl->dCtlStorage;
args = (long *) &ctlpb->csParam[0];
if (ctlpb->csCode == HTN_INIT) {
/* save 3270 vectors */
tnargs = (struct storage *) (* ((long *) &ctlpb->csParam[0]));
/* first long of parameters points to array of vectors/pointers*/
*store = *tnargs;
}
else if (store->tnopen == (void (*)()) 0L) {
/* no go, TN3270 has not registered routines */
HUnlock(dctl->dCtlStorage);
return(HTNR_NOTN);
}
if (ctlpb->csCode == HTN_STATUS) {
cfunc = store->tnstatus;
retval = (*cfunc)(args);
/* called function fills in first long in csParam, -> screen buffer */
}
else if (ctlpb->csCode == HTN_SENDSTR) {
cfunc = store->tnsendstr;
retval = (*cfunc)(*args);
}
else if (ctlpb->csCode == HTN_SENDCMD) {
cfunc = store->tnsendcmd;
retval = (*cfunc)(*args, *(args+1));
}
else if (ctlpb->csCode == HTN_CONNECT) {
cfunc = store->tnconnect;
retval = (*cfunc)(*args);
}
else if (ctlpb->csCode == HTN_CLOSE) {
cfunc = store->tnclose;
retval = (*cfunc)();
}
else if (ctlpb->csCode == HTN_QUIT) {
cfunc = store->tnquit;
retval = (*cfunc)();
}
else if (ctlpb->csCode == HTN_CURSOR) {
cfunc = store->tncursor;
retval = (*cfunc)(args);
/* called function returns cursor pos in first long in csParam */
}
else if (ctlpb->csCode == HTN_DRAW) {
cfunc = store->tndraw;
retval = (*cfunc)(*args);
}
else if (ctlpb->csCode == HTN_OPEN) {
cfunc = store->tnopen;
retval = (*cfunc)(); /* open TN up */
*args = (long) store->tnscreen; /* return 3270 buffer ptr */
*++args = (long) store->tncursor; /* return 3270 cursor ptr */
*++args = (long) store->tnfield; /* return 3270 field ptr */
}
HUnlock(dctl->dCtlStorage);
return(retval);
}
pascal OSErr DRVRClose(ctlpb, dctl)
CntrlParam * ctlpb;
DCtlPtr dctl;
{
DisposHandle(dctl->dCtlStorage);
return(0);
}
pascal OSErr DRVRPrime(ctlpb, dctl)
CntrlParam * ctlpb;
DCtlPtr dctl;
{
/* never called */
return(0);
}
pascal OSErr DRVRStatus(ctlpb, dctl)
CntrlParam * ctlpb;
DCtlPtr dctl;
{
/* never called */
return(0);
}